package com.example.service;

import com.example.bean.Medicine;
import com.example.dao.MedicineDAO;

import java.util.List;

/**
 * 药材业务逻辑JavaBean
 * 负责处理药材相关的业务逻辑
 */
public class MedicineService {
    
    private MedicineDAO medicineDAO;
    
    /**
     * 构造函数，初始化DAO
     */
    public MedicineService() {
        this.medicineDAO = new MedicineDAO();
    }
    
    /**
     * 获取所有药材列表
     * @return 药材列表
     */
    public List<Medicine> getAllMedicines() {
        return medicineDAO.findAll();
    }
    
    /**
     * 根据ID获取药材信息
     * @param id 药材ID
     * @return 药材对象，如果不存在返回null
     */
    public Medicine getMedicineById(int id) {
        return medicineDAO.findById(id);
    }
    
    /**
     * 搜索药材
     * @param keyword 搜索关键词
     * @return 药材列表
     */
    public List<Medicine> searchMedicines(String keyword) {
        if (keyword == null || keyword.trim().isEmpty()) {
            return getAllMedicines();
        }
        return medicineDAO.search(keyword.trim());
    }
    
    /**
     * 添加药材
     * @param medicine 药材对象
     * @return 是否添加成功
     */
    public boolean addMedicine(Medicine medicine) {
        // 业务逻辑验证
        if (medicine == null) {
            return false;
        }
        
        if (medicine.getMedicineNo() == null || medicine.getMedicineNo().trim().isEmpty()) {
            return false;
        }
        
        if (medicine.getMedicineName() == null || medicine.getMedicineName().trim().isEmpty()) {
            return false;
        }
        
        // 验证药材编号是否已存在
        if (isMedicineNoExists(medicine.getMedicineNo())) {
            return false;
        }
        
        // 调用DAO层添加
        return medicineDAO.add(medicine);
    }
    
    /**
     * 更新药材信息
     * @param medicine 药材对象
     * @return 是否更新成功
     */
    public boolean updateMedicine(Medicine medicine) {
        // 业务逻辑验证
        if (medicine == null || medicine.getId() <= 0) {
            return false;
        }
        
        if (medicine.getMedicineNo() == null || medicine.getMedicineNo().trim().isEmpty()) {
            return false;
        }
        
        if (medicine.getMedicineName() == null || medicine.getMedicineName().trim().isEmpty()) {
            return false;
        }
        
        // 调用DAO层更新
        return medicineDAO.update(medicine);
    }
    
    /**
     * 删除药材
     * @param id 药材ID
     * @return 是否删除成功
     */
    public boolean deleteMedicine(int id) {
        // 业务逻辑验证
        if (id <= 0) {
            return false;
        }
        
        // 调用DAO层删除
        return medicineDAO.delete(id);
    }
    
    /**
     * 验证药材编号是否已存在
     * @param medicineNo 药材编号
     * @return 是否存在
     */
    public boolean isMedicineNoExists(String medicineNo) {
        if (medicineNo == null || medicineNo.trim().isEmpty()) {
            return false;
        }
        
        List<Medicine> medicines = medicineDAO.findAll();
        for (Medicine medicine : medicines) {
            if (medicineNo.equals(medicine.getMedicineNo())) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 按药材性味分类统计
     * @return 统计信息
     */
    public String getMedicineStatistics() {
        List<Medicine> medicines = getAllMedicines();
        return "共有 " + medicines.size() + " 种药材";
    }
}

